查看原文
其他

面试中遇到这 3 个SQL问题,最容易掉坑里!

Nathan R CSDN云计算 2020-10-29

作者 | Nathan R
译者 | 天道酬勤,责编 | Carol
封图 | CSDN下载自视觉中国
       
在本文中,作者将介绍来自3个在技术面试中的真实的SQL问题,这些问题都是在实际公司进行技术筛选时提出的。
 

最常见的读者问题:我应该如何准备SQL面试?

准备 SQL 面试时,我会认真地做尽可能多的事情,这样以来,写查询就变成了我的第二天性。我希望技术部分成为面试过程中比较容易的部分,这样我就可以集中精力与面试官进行交流,并将我的精力花在用白板书写我的方法和解决方案上。 
根据我在技术面试中的经验,面试官测试的最大重点是理解代码的在做什么,如何考虑各种场景或边缘情况以及结果的含义。
与你在工作中编写的冗长而复杂的查询相比,SQL部分非常简单。要么为你提供1个或2个表,并要求你创建一个需要进行联接或自联接的SQL查询,要么为你提供了SQL代码,并要求对其进行调试。
只要你了解JOINS和COALESCE之类的高级功能,就不会有问题。使面试变得困难的是,如何将代码编写与运行代码后得到的结果联系起来。

以下是在技术面试中被问到的3个真实的SQL问题
 
1、假设给你一个表,其中包含用户的好友请求、接受和他们的日期。如何编写一个查询,以便随着时间的推移可以获得%的好友接受率?
这个查询很容易创建(提示:使用自连接),但是你还需要在如何编写查询的权衡上进行额外的测试。你如何处理几天后发生朋友的接受?你哪一天算验收日期?你是在好友发送请求之日算起,还是在接受请求之日算起?为什么?
这当中没有正确或错误的答案,但是你需要确定有两种不同的方式来编写查询,然后讨论这两种选择之间的取舍。
2、如果你做了一次AB实验,并且由于在试点地区推出了一项新功能,朋友的接受度增加了2倍,且p <0.05,那么你会将其部署到生产环境中并推广到所有用户吗? 
大多数人会说是的,但是在面试中,最明显的答案可能不是正确的答案。在这种情况下,正确的选择是:这要看情况。然后,你应该谈谈其原因,以及你需要哪些额外信息来做决定。
这些都是你需要注意考虑的问题,要思考如何形成一个完整的答案。
3、你有一个主表,其中包含一个用户ID及其最近的登录日期,并且你还有第二张表,其中包含当天登录的所有用户(同一用户当天可能有多次登录)。编写一个查询,该查询将使用用户ID及其最新登录日期来更新主表。 
很简单,但是你需要练习理解所有不同的场景。在这种情况下,你有一个当天刚注册新用户的情况,以及当天有同一位用户多次登录的情况。你如何处理这些情况?       
 

更多建议

我相信你在阅读本文时认为这些问题很简单。但困难的是,你在面试过程中可能并没有预料到这些问题,并且当下情况会要求你在面试官面前快速地分析和解决。你被要求编写一些代码,然后考虑所有不同的情况以及结果的含义。这可能是一个压力很大的情况,大多数人会不知所措。
这就是为什么你的技术技能需要第二天性。你的SQL技能必须与中文写作技能一样好。
在准备SQL面试时,作者给你的主要建议是,了解为什么、如何编写代码来解决特定问题。准备好交流为什么要编写特定的代码行,为解决特定的极端情况和场景,你要添加什么逻辑以及输出什么样的结果。你的解释与代码本身同样重要,甚至更重要。
另外,在构建解决方案时,请一定要和与面试官交谈,并让他们尽可能多地了解你的思考过程。 
SQL面试是为了测试你的技术技能。在你的面试中,你要把你的技能归为零,并确保尽可能多地做练习题。 
原文链接:https://hackernoon.com/3-real-sql-questions-asked-during-technical-interviews-x22w3ysa
本文为 CSDN 翻译,转载请注明出处。

6月3日20:00,CSDN 创始人&董事长、极客帮创投创始合伙人蒋涛携手全球顶级开源基金会主席、董事,聚焦中国开源现状,直面开发者在开源技术、商业上的难题,你绝不可错过的开源巅峰对谈!立即免费围观
推荐阅读
真香,朕在看了!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存